/**
 * @file      idir.h
 * @copyright Copyright (c) 2019, ZCW Co., Ltd. All Rights Reserved.
 * @brief     brief
 * @author    caiwang213@qq.com
 * @date      2019-08-25 10:59:46
 *
 * @note
 *  idir.h defines
 */
#ifndef __IDIR_H__
#define __IDIR_H__
#include "os.h"
#include <sys/stat.h>
#include <string>
#include <vector>
using namespace std;

namespace log4x
{
class idir
{
public:
    /**
     * @brief 判断指定的文件或目录是否存在
     *
     * @param [in] pathname    文件或文件夹名称
     * @param [in] mode        文件权限模式
     *                         - bit0 - 是否存在
     *                         - bit1 - 可写
     *                         - bit2 - 可读
     *                         - bit3 - 可执
     * @return                 - 0  - 成功
     *                         - -1 - 失败
     */
    virtual int         access(const string& pathname, int mode) = 0;

    virtual int         copy(const string& src, const string& dst) = 0;
    virtual void        copy_dir(const string& src, const string& dst) = 0;
    virtual void        remove(const string& file) = 0;

    virtual bool        is_dir(const string& path) = 0;
    virtual int         mk_dir(const string& path) = 0;
    virtual int         ls_dir(const string& path, vector<string>& files) = 0;

    virtual string      home(const string& user = "") = 0;
    virtual string      absolute_path(const string& relative_path) = 0;

    virtual int         stat(const string& path, struct stat& sb) = 0;
    virtual int         chmod(const string& path, uint32_t mode) = 0;

protected:
    virtual ~idir() {}
};
}
#endif
